static pascal OSStatus SearchForAcceptableDescriptors
(DescType acceptableDescType, const AEDesc *desc, Boolean *allOK)
{
OSStatus err = noErr;
*allOK = true;
if (desc->descriptorType != acceptableDescType)
{
if (desc->descriptorType == typeAERecord || desc->descriptorType == typeAEList)
{
long index;
if (!(err = AECountItems (desc,&index)) && index) do
{
AEDesc nthDesc;
AEKeyword keyword;
OSStatus err2;
err = AEGetNthDesc (desc,index,typeWildCard,&keyword,&nthDesc);
if (err) break;
err = SearchForAcceptableDescriptors (acceptableDescType,&nthDesc,allOK);
err2 = AEDisposeDesc (&nthDesc);
if (err) break;
err = err2;
if (err) break;
if (!*allOK) break;
}
while (--index);
}
else
{
AEDesc coerced;
if (!(err = AECoerceDesc (desc,acceptableDescType,&coerced)))
err = AEDisposeDesc (&coerced);
else if (err == errAECoercionFail)
{
err = noErr;
*allOK = false;
}
}
}
return err;
}
|